#ifndef __ARBREARITHMETIQUE__
#define __ARBREARITHMETIQUE__
#include "ensemble.h"
#include "pile.h"

struct _Noeud
{
  void *element;
  Ensemble *ensemble;
};

typedef struct _Noeud Arbre;

void initArbreVide(Arbre **arbre);

void initArbreEntier(Arbre **arbre, const int i);

void initArbreChar(Arbre **arbre, const char * i);

void initArbreCopie(Arbre **arbreDest, const Arbre *arbreSource);

void detruireArbre(Arbre **arbre);

/**
   @attention a modifier pour suivre les consignes 
*/
void operationArbres(const Arbre* arbre1,const  Arbre* arbre2, const char* op, Arbre **result);

void additionArbres(const Arbre* arbre1, const Arbre* arbre2, Arbre** result);

void multiplicationArbres(const Arbre* arbre1, const Arbre* arbre2, Arbre** result);

void soustractionArbres(const Arbre* arbre1, const Arbre* arbre2, Arbre **result);

void divisionArbre(const Arbre* arbre1, const Arbre* arbre2, Arbre** result);

int valeurArbre(const Arbre *arbre);

void afficheArbreExpression(const Arbre *arbre);

void afficheArbre(const Arbre *arbre);

void affcheNoeud(const Noeud *noeud);

void parseArbre(Arbre **arbre, char *expression);

char estOperateur(char **expression);

int getEntier(char **i, int* result);

void *creerEntier(const void *i);

void detruireEntier(void **i);

void copierEntier(void **dest, const void *src);

void *creerChar(const void *i);

void detruireChar(void **i);

void copierChar(void **dest, const void *src);

#endif
